package com.framework.res;


import com.softcomputo.commons.exception.GeneralRuntimeException;
import java.util.List;
import java.util.Map;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Iframe;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Tabpanel;
import org.zkoss.zul.Tabpanels;
import org.zkoss.zul.Tabs;
import org.zkoss.zul.Window;

public class TabsValidator {

	private static final String IFRAME = "IF";

	public static void addTab(String name, String Url, Tabs tabs,
			Tabpanels tabpanels, Map<String,Object> params, Window parent) {
		/* validaciones */
		if (name == null)
			throw new GeneralRuntimeException("el nombre no puede set nulo");

		/* verificamos si la pestaña ya se encuentra */
		List<Component> abstractComponents = tabs.getChildren();
		for (Component abstractComponent : abstractComponents) {
			if (abstractComponent instanceof Tab) {
				Tab tab = (Tab) abstractComponent;
				if (tab.getLabel().trim().equalsIgnoreCase(name)) {
					tabs.getTabbox().setSelectedTab(tab);
					return;
				}
			}
		}

		/* selagretgamos la pestaña con la vista y enviamos los parametros */
		/* agregamos tabs */
		Tab tab = new Tab("" + name);
		tab.setClosable(true);
		tabs.appendChild(tab);

		/* agreamos el contenido */
		Component componente = Executions.createComponents(Url, parent, params);
		final Window ventana = (Window) componente;
		ventana.setWidth("100%");
		ventana.setHeight("100%");
		ventana.setVflex("1");

		Tabpanel tabpanel = new Tabpanel();
		tabpanel.appendChild(ventana);
		tabpanels.appendChild(tabpanel);
		tabs.getTabbox().setSelectedTab(tab);
		/* fin */
	}

	public static void addTabParam(String name, String Url, Tabs tabs,
			Tabpanels tabpanels, Window parent) {
		/* validaciones */
		if (name == null)
			throw new GeneralRuntimeException("el nombre no puede set nulo");

		/* verificamos si la pestaña ya se encuentra */
		List<Component> abstractComponents = tabs.getChildren();
		for (Component abstractComponent : abstractComponents) {
			if (abstractComponent instanceof Tab) {
				Tab tab = (Tab) abstractComponent;
				if (tab.getLabel().trim().equalsIgnoreCase(name)) {
					tabs.getTabbox().setSelectedTab(tab);
					return;
				}
			}
		}

		/* agretgamos la pestaña con la vista y enviamos los parametros */
		/* agregamos tabs */
		Tab tab = new Tab("" + name);
		tab.setClosable(true);
		tabs.appendChild(tab);

		// Para devolver el foco a la vista
		tab.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
			@Override
			public void onEvent(Event evt) throws Exception {
				Iframe iframe = (Iframe) evt.getTarget().getAttribute(IFRAME);
				iframe.focus();
			}
		});

		Iframe iframe = new Iframe();
		iframe.setSrc(Url);
		iframe.setWidth("100%");
		iframe.setHeight("100%");
		iframe.setVflex("1");
		iframe.setStyle("padding-top : 5px");
		iframe.setScrolling("auto");
		tab.setAttribute(IFRAME, iframe);

		Tabpanel tabpanel = new Tabpanel();
		tabpanel.appendChild(iframe);
		tabpanels.appendChild(tabpanel);
		tabs.getTabbox().setSelectedTab(tab);
		iframe.focus();// adicionamos el foco
		/* fin */
	}

}
